#ifndef CUSTOMTABLEMODEL_H
#define CUSTOMTABLEMODEL_H
#include<QAbstractTableModel>
#include <QObject>
#include <QVector>
#include <QString>
#include <QIcon>
#include <QVariant>
#include <QColor>
#include <QDateTime>

// 文档类型枚举
enum DocType
{
    InstallGuide,    // 安装指南
    UserManual,      // 说明文档
    DesignDoc,       // 设计文档
    OtherDoc         // 其他文档
};

// 表格一行数据的描述
struct TableItem
{
    //文件名
    QString fileName;
    //文档类型的枚举
    DocType docType;
    //文档格式
    QString docFormat;
    //文件大小
    QString size;
    //文件创建时间
    QDateTime createTime;
    //文件更新时间
    QDateTime updateTime;
    int status; // 状态值，用于控制显示样式或图片
    QIcon icon; // 文件图标

    TableItem() : docType(OtherDoc), status(0) {}
};
class CustomTablemodel:public QAbstractTableModel
{
    Q_OBJECT
public:
    CustomTablemodel(QObject*parent=nullptr);
    ~CustomTablemodel();

    // 返回行数
    int rowCount(const QModelIndex &parent = QModelIndex()) const override;
    //返回列数
    int columnCount(const QModelIndex &parent = QModelIndex()) const override;
    //返回数据 role代表数据用来干什么的
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
    //返回表头数据
    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;

    // 向模型设计数据
    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
    //设置单元格标志
    Qt::ItemFlags flags(const QModelIndex &index) const override;

    // 设置表头数据
    void setHorizontalHeader(const QStringList &headers);

    // 动态添加/删除数据
    void addItem(const TableItem &item);
    void removeItem(int row);
    void clearAll();

    // 动态设置状态和样式
    void setItemStatus(int row, int status);
    void setItemIcon(int row, const QIcon &icon);

    // 获取数据
    TableItem getItem(int row) const;

    // 文档类型转换字符串
    static QString docTypeToString(DocType type);
    //字符串转文件类型枚举值
    static DocType stringToDocType(const QString &typeStr);

private:
    QVector<TableItem> m_tableData;
    //表头数据存放位置
    QStringList m_horizontalHeaders;

    // 根据文件类型获取对应的图标
    QIcon getFileIcon(const QString &fileType) const;
    // 根据状态获取对应的颜色
    QColor getStatusColor(int status) const;
};

#endif // CUSTOMTABLEMODEL_H
